package algo3.grupo3.controlador;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import algo3.grupo3.modelo.Bomba;
import algo3.grupo3.modelo.Bombita;
import algo3.grupo3.vista.EntidadBombita;
import algo3.grupo3.vista.VentanaJuego;

public class ControlTecladoJugador extends KeyAdapter{
	private EntidadBombita entidadBombita;
	private VentanaJuego ventanaJuego;
	
	public void cargarBombita(EntidadBombita eb){
		if(eb!=null)
			this.entidadBombita= eb;
	}//fin de cargarBombita
	
	public void setearVentanaJuego(VentanaJuego vj){
		if(vj== null)
			return;
		ventanaJuego= vj;
	}//fin de setearVentanaJuego
	
	@Override
	public void keyPressed(KeyEvent teclaPulsada){
		int codigoTecla = teclaPulsada.getKeyCode();
		
		if(this.entidadBombita!= null)			
			if(this.ventanaJuego.juegoEstaCorriendo() && entidadBombita.objetoSigueActivo())
				this.controlarMovimientoBombita(teclaPulsada);			
		
		
		if(codigoTecla== KeyEvent.VK_P)
			if(this.ventanaJuego.juegoEstaCorriendo())
				this.ventanaJuego.pausarJuego();
			else
				if(this.ventanaJuego.obtenerEstadoJuego()== VentanaJuego.PAUSA)
					this.ventanaJuego.iniciarJuego();
		
		
		this.controlarFlujoJuego(teclaPulsada);
			
		System.gc();
		
		
	}//fin de KeyPressed
	
	private void controlarMovimientoBombita(KeyEvent ke){
		
		int codigoTecla= ke.getKeyCode();
		Bombita personaje= (Bombita)this.entidadBombita.obtenerObjeto();
		switch(codigoTecla){
		case KeyEvent.VK_UP:
			entidadBombita.establecerSiguienteMovimiento(entidadBombita.MOVERSE_ARRIBA);
			break;
		case KeyEvent.VK_RIGHT:
			entidadBombita.establecerSiguienteMovimiento(entidadBombita.MOVERSE_DERECHA);
			break;
		case KeyEvent.VK_LEFT:
			entidadBombita.establecerSiguienteMovimiento(entidadBombita.MOVERSE_IZQUIERDA);
			break;
		case KeyEvent.VK_DOWN:
			entidadBombita.establecerSiguienteMovimiento(entidadBombita.MOVERSE_ABAJO);
			break;
		case KeyEvent.VK_SPACE:
			Bomba b= personaje.plantarBomba();
			this.entidadBombita.plantarBomba(b);
			break;
		}//fin del switch
		
		personaje= null;
		System.gc();
		
	}//fin de controlarMovimiento
	
	
	private void controlarFlujoJuego(KeyEvent ke){
		
		int keyCode= ke.getKeyCode();
		int estadoJuego= this.ventanaJuego.obtenerEstadoJuego();
		
		
		switch(estadoJuego){
		case VentanaJuego.NO_INICIADO:
			switch(keyCode){
			case KeyEvent.VK_1:
				this.ventanaJuego.reiniciarJuego();
				break;
			case KeyEvent.VK_2:
				this.ventanaJuego.cargarPartida();
			}
			break;
		case VentanaJuego.PAUSA:
			switch(keyCode){
			case KeyEvent.VK_1:
				this.ventanaJuego.guardarPartida();
				break;
			case KeyEvent.VK_2:
				this.ventanaJuego.cargarPartida();
				break;
			case KeyEvent.VK_3:
				this.ventanaJuego.reiniciarNivel();
				break;				
			}
			break;
		case VentanaJuego.TERMINADO:
			switch(keyCode){
			case KeyEvent.VK_1:
				this.ventanaJuego.reiniciarNivel();
				break;
			case KeyEvent.VK_2:
				this.ventanaJuego.cargarPartida();
				break;
			}
			break;
		case VentanaJuego.GANADO:
			switch(keyCode){
			case KeyEvent.VK_1:
				this.ventanaJuego.reiniciarJuego();
				break;
			case KeyEvent.VK_2:
				this.ventanaJuego.cargarPartida();
				break;
			}
			
		}//fin de switch estadoJuego
		
	}//fin de controlarFlujoJuego

	public EntidadBombita obtenerEntidad() {
		return this.entidadBombita;
	}

	public VentanaJuego obtenerVentanaJuego() {
		return this.ventanaJuego;
	}
	
}//fin de controlTecladoJugador
